john love mary
Language & Cognition: re-reading Jerry Fodor
In my opinion the late Jerry Fodor was one of the most brilliant cognitive scientists (that I knew of), if you wanted to have a deep understanding of the major issues in cognition and the plausibility/implausibility of various cognitive architectures. Very few had the technical breadth and depth in tackling some of the biggest questions concerning the mind, language, computation, the nature of concepts, innateness, ontology, etc. The other day I felt like re-reading his Concepts -- Where Cognitive Science Went Wrong (I read this small monograph at least 10 times before, and I must say that I still do not comprehend everything that's in it fully). But, what did happen in the 11th reading of Concepts is this: I now have a new and deeper understanding of his Productivity, Systematicity and Compositionality arguments that should clearly put an end to any talk of connectionist architectures being a serious architecture for cognition -- by'connectionist architectures' I roughly mean also modern day'deep neural networks' (DNNs) that are essentially, if we strip out the advances in compute power, the same models that were the target of Fodor's onslaught. I have always understood the'gist' of his argument, but I believe I now have a deeper understanding -- and, in the process I am now more than I have ever been before, convinced that DNNs cannot be considered as serious models for high-level cognitive tasks (planning, reasoning, language understanding, problem solving, etc.) beyond being statistical pattern recognizers (although very good ones at that).
Memorizing vs. Understanding (read: Data vs. Knowledge)
So how can I get the result of the arithmetic expression, e? Well, there are two ways: (i) if I'm lucky, and lazy (think: efficiency) I could have the value of e stored (as data) in some hashtable (a data dictionary) where I can use a key to pick-up the value of e anytime I need it (figure 1); The first method, let's call it the data/memorization method, does not require us to know how to compute e. That is, if the value of e is not memorized (and stored in some data storage), then the only way to get the value of e is to know that adding m to n is essentially adding n 1's to m and knowing that multiplying m by n is adding m to itself n times (and thus'multiplication' can be defined only after the more primitive function'addition' is defined). Crucially, then, the first method is limited to the data I have seen and memorized (i.e., stored in memory), while the second method does not have this limitation -- in fact, once I know the procedures of addition and multiplication (and other operations) then I'm ready for an infinite number of expressions. So we could, at this early juncture, describe the first method by "knowing what (is the value)" and the second method by "knowing how (to compute the value)" -- the first is fast (not to mention easy) but limited to the data I have seen and memorized (stored). The second is not limited to the data we have seen, but requires detailed knowledge (knowing how) of the procedures.